package _case

import "fmt"

func NewCase() {
	// 通过new函数，额可以创建任意类型，并返回指针
	mpss := new(map[string]*user)
	if *mpss == nil { // mpss是地址，地址不是空，如果取值的话，这个地址对应的值就是空的
		fmt.Println("空")
	} else {
		fmt.Println("有值")
	}
	//(*mpss)["a"] = &user{}
	sliceP := new([]user)
	if *sliceP == nil {
		fmt.Println("值为Nil", *sliceP)
	}
	*sliceP = append(*sliceP, user{Name: "王旭东"})
	fmt.Println(mpss, sliceP, *sliceP) //返回&map[]

}

// make 只用于切片、集合、通道
func MakeCase() {
	slicesss := make([]int, 10, 20) //长度，容量
	slicesss[0] = 10
	fmt.Println(slicesss)
	//初始化集合，并设置集合的初始大小
	mp := make(map[string]int, 10)
	mp["A"] = 10
	fmt.Println(mp["A"])

	//初始化通道，设置通道的读写方向和缓冲大小。
	ch := make(chan int, 10)    //缓存长度为10，可读可写
	ch1 := make(chan<- int, 10) //只写
	ch2 := make(<-chan int)     //只读的
	fmt.Println(slicesss, mp, ch, ch1, ch2)
}

func SliceAndMapCase() {
	//切片和map
	var sku []int
	sku = []int{10, 20, 30, 40}
	sku1 := make([]int, 10)
	sku1[1] = 1000
	fmt.Println(sku1, sku)
	//切片的截取
	slice2 := make([]int, 5, 10)

	fmt.Println(len(slice2), cap(slice2))
	slice2[0] = 100
	slice2[1] = 200
	slice2[2] = 300
	slice2[3] = 400
	slice2[4] = 500

	slice3 := slice2[2:5] //索引5是不包括的
	//切片的附加,容量不够，自动扩容
	fmt.Println(slice3, len(slice3), cap(slice3))
	for i := 0; i < 3; i++ {
		slice3 = append(slice3, slice2[i]) //循环从另一个切片追加数据
	}
	fmt.Println(slice3)

	//集合，无序
	mp := make(map[string]string, 10)
	mp["A"] = "a"
	mp["B"] = "b"
	mp["C"] = "c"
	mp["D"] = "d"
	mp["E"] = "e"
	fmt.Println(mp)
	for index_value, value := range mp {
		fmt.Println(index_value, value)
	}
	//删除集合中的数据
	delete(mp, "A")
	fmt.Println("删除一个集合元素", mp)

}
